package be.vdab.entities;

import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;

import javax.persistence.CollectionTable;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.JoinColumn;

import be.vdab.valueobjects.Bestelbonlijn;

@Entity
@Table(name = "bestelbonnen")
public class Bestelbon implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private long bonNr;
	@Temporal(TemporalType.TIMESTAMP)
	private Date bestelDatum;
	private String naam;
	private String straat;
	private String huisNr;
	private String postcode;
	private String gemeente;
	private int bestelwijze;
	/*
	 * @ManyToMany(mappedBy = "bestelbonnen") private Set<Wijn> wijnen;
	 */

	@ElementCollection
	@CollectionTable(name = "bestelbonlijnen", joinColumns = @JoinColumn(name = "bonNr"))
	private Set<Bestelbonlijn> bestelbonlijnen;

	protected Bestelbon() {

	}

	public Bestelbon(Date bestelDatum, String naam, String straat,
			String huisNr, String postcode, String gemeente, int bestelwijze) {
		super();
		setBestelDatum(bestelDatum);
		setNaam(naam);
		setStraat(straat);
		setHuisNr(huisNr);
		setPostcode(postcode);
		setGemeente(gemeente);
		setBestelwijze(bestelwijze);
		// wijnen = new LinkedHashSet<>();
		bestelbonlijnen = new LinkedHashSet<>();
	}

	public Date getBestelDatum() {
		return bestelDatum;
	}

	public void setBestelDatum(Date bestelDatum) {
		this.bestelDatum = bestelDatum;
	}

	public String getNaam() {
		return naam;
	}

	public void setNaam(String naam) {
		this.naam = naam;
	}

	public String getStraat() {
		return straat;
	}

	public void setStraat(String straat) {
		this.straat = straat;
	}

	public String getHuisNr() {
		return huisNr;
	}

	public void setHuisNr(String huisNr) {
		this.huisNr = huisNr;
	}

	public String getPostcode() {
		return postcode;
	}

	public void setPostcode(String postcode) {
		this.postcode = postcode;
	}

	public String getGemeente() {
		return gemeente;
	}

	public void setGemeente(String gemeente) {
		this.gemeente = gemeente;
	}

	public int getBestelwijze() {
		return bestelwijze;
	}

	public void setBestelwijze(int bestelwijze) {
		this.bestelwijze = bestelwijze;
	}

	public long getBonNr() {
		return bonNr;
	}

	/*
	 * public void addWijn(Wijn wijn) { wijnen.add(wijn); if
	 * (!wijn.getBestelbonnen().contains(this)) { wijn.addBestelbon(this); } }
	 * 
	 * public void removeWijn(Wijn wijn) { wijnen.remove(wijn); if
	 * (wijn.getBestelbonnen().contains(this)) { wijn.removeBestelbon(this); } }
	 * 
	 * public Set<Wijn> getWijnen() { return
	 * Collections.unmodifiableSet(wijnen); }
	 */

	public Set<Bestelbonlijn> getBestelbonlijnen() {
		return Collections.unmodifiableSet(bestelbonlijnen);
	}

	public void addBestelbonlijn(Bestelbonlijn bestelbonlijn) {
		bestelbonlijnen.add(bestelbonlijn);
	}

	public void removeBestelbonlijn(Bestelbonlijn bestelbonlijn) {
		bestelbonlijnen.remove(bestelbonlijn);
	}
}
